package 两数之和;

import java.util.Arrays;

public class Solution2 {
    /*
    给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
    你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。
    你可以按任意顺序返回答案。
     */
    public int[] twoSum(int[] nums, int target) {
        // 利用数组的双指针法
        int[] temp = new int[nums.length];
        System.arraycopy(nums, 0, temp, 0, nums.length);
        Arrays.sort(temp);
        int i = 0, j = 0;
        // 利用双指针找到两个元素之和等于target的元素值
        for (i = 0, j = temp.length - 1; i < temp.length && i < j; ) {
            if (temp[i] + temp[j] > target)
                j--;
            else if (temp[i] + temp[j] < target)
                i++;
            else
                break;
        }

        int[] result = new int[2];
        // 遍历找到两个元素值在原数组中对于的索引
        if (temp[i] + temp[j] == target) {
            int n, m;
            for (n = 0; n < nums.length; n++)
                if (nums[n] == temp[i]) {
                    result[0] = n;
                    break;
                }
            for (m = 0; m < nums.length; m++)
                if (nums[m] == temp[j] && n != m)
                    result[1] = m;
        }
        return result;
    }
}
